home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / cpptask.exe / SIO.HPP < prev    next >
C/C++ Source or Header  |  1991-08-21  |  4KB  |  127 lines

  1. /*
  2.    CPPTask - A Multitasking Kernel For C++
  3.  
  4.    SIO.HPP - Serial I/O interface routine definitions.
  5.  
  6.    Version 1.0 08-12-91
  7.  
  8.    Ported by Rich Smith from:
  9.  
  10.    Public Domain Software written by
  11.       Thomas Wagner
  12.       Patschkauer Weg 31
  13.       D-1000 Berlin 33
  14.       West Germany
  15. */
  16.  
  17.  
  18. #define COM1PORT   0x80     // COM1, relative
  19. #define COM2PORT   0x81     // COM1, relative
  20.  
  21. #define XON       0x11
  22. #define XOFF      0x13
  23.  
  24. // Parity values for "v24_change_parity"
  25.  
  26. #define PAR_NONE  0x00
  27. #define PAR_EVEN  0x18
  28. #define PAR_ODD   0x08
  29. #define PAR_MARK  0x28
  30. #define PAR_SPACE 0x38
  31.  
  32. // Modem control bits for "v24_watch_modem"
  33.  
  34. #define CTS       0x10
  35. #define DSR       0x20
  36. #define RI        0x40
  37. #define CD        0x80
  38.  
  39. // Values for "v24_protocol"
  40.  
  41. #define XONXOFF   0x01
  42. #define RTSCTS    0x02
  43.  
  44. // Internal structures
  45.  
  46. struct  port_data;       // forward reference
  47. class   commport;         // forward reference
  48. typedef port_data far *portptr;
  49. typedef commport far *commptr;
  50.  
  51. struct port_data {
  52.    portptr     next;    // Next defined port
  53.    int         pnum;    // Internal Port ID
  54.    commptr     sio;     // SIO control block
  55.    int         base;    // Port base
  56.    byte        irq;     // IRQ level
  57.    byte        vector;  // Interrupt vector number
  58. };
  59.  
  60.  
  61. class commport {
  62.    commptr  next;           // Next link for shared IRQs
  63.    farptr   savvect;        // Interrupt vector save location
  64.    portptr  port;           // Port descriptor pointer
  65.    int      port_base;      // Port base I/O address
  66.    int      r_xoff;         // Receive disable (XOFF sent)
  67.    int      t_xoff;         // Transmit disable (XOFF received)
  68.    int      xoff_threshold; // Pipe free threshold for XOFF
  69.    int      xon_threshold;  // Pipe free threshold for XON
  70.    byte     clcontrol;      // Current line control reg
  71.    byte     cmodcontrol;    // Current modem control reg
  72.    byte     irqbit;         // IRQ-Bit for this port
  73.    byte     civect;         // Interrupt Vector for this port
  74.    byte     modstat;        // Current modem status
  75.    byte     wait_xmit;      // Transmit delayed
  76.    byte     xmit_pending;   // Transmit in progress
  77.    byte     rtsoff;         // RTS turned off by protocol
  78.    byte     overrun;        // Pipe full on receive
  79.    byte     modem_flags;    // Transmit enable modem flags
  80.    byte     flags;          // Protocol flags
  81.  
  82.    byte     save_lcon;      // Previous line control value
  83.    byte     save_mcon;      // Previous modem control value
  84.    byte     save_inten;     // Previous interrupt control value
  85.    byte     save_irq;       // Previous interrupt bit value
  86.    byte     save_bd1;       // Previous baud rate lower byte
  87.    byte     save_bd2;       // Previous baud rate upper byte
  88.  
  89.    byte     restore;        // Restore modem params at destruct?
  90.  
  91.    wpipe    rcv_pipe;       // Received characters
  92.    pipe     xmit_pipe;      // Transmit pipe
  93.  
  94. // private member functions
  95.  
  96.    void chng_rts(int on);
  97.    void transmit_ready(void);
  98.    void modem_status_int(void);
  99.    void receive_ready(void);
  100.    void sioint(void);
  101. // friend declarations
  102.    friend void interrupt far sioint3(void);
  103.    friend void interrupt far sioint4(void);
  104. public:
  105.    commport (int port, int init,
  106.              farptr rcvbuf, word rcvsize,
  107.              farptr xmitbuf, word xmitsize);
  108.    ~commport ();
  109.    void far change_rts (int on);
  110.    void far change_dtr (int on);
  111.    void far change_baud (long rate);
  112.    void far change_parity (int par);
  113.    void far change_wordlength (int len);
  114.    void far change_stopbits (int n);
  115.    void far watch_modem (byte flags);
  116.    void far protocol (int prot, word offthresh, word onthresh);
  117.    int far  send (byte ch, dword timeout);
  118.    int far  receive (dword timeout);
  119.    int far  rcv_overrun (void);
  120.    int far  check (void);
  121.    int far  modem_status (void);
  122.    int far  complete (void);
  123.    int far  wait_complete (dword timeout);
  124.    void far flush_receive (void);
  125. };
  126.  
  127.